package com.eboss.sbs.myapplication;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory.Options;
import android.os.Build;
import android.util.TypedValue;
import android.view.WindowManager;
import android.widget.LinearLayout;

import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.eboss.sbs.R;
import com.eboss.sbs.consts.SharedConsts;
import com.eboss.sbs.model.LoginEntity;
import com.google.gson.Gson;
import com.loopj.android.http.AsyncHttpClient;
import com.mytools.tool.utils.ScreenUtils;
import com.mytools.tool.utils.SharedUtil;
import com.mytools.tool.utils.StringUtil;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;
import com.umeng.analytics.MobclickAgent;
import com.umeng.analytics.MobclickAgent.UMAnalyticsConfig;

import org.litepal.LitePalApplication;

import java.io.File;

public class MyApplication extends LitePalApplication {

    private static MyApplication mInstance = null;
    private static AsyncHttpClient httpclient = new AsyncHttpClient();

    public static SharedUtil shareUtil;
    private LoginEntity loginEntity;
    //public UpayTask upayTask;			//收钱吧

    public LocationClient locationClient = null;

    public LoginEntity getLoginEntity() {
        if (loginEntity == null) {
            loginEntity = recoveryUserInfoEntity();
            //if(loginEntity!=null){setLoginEntity(loginEntity);}
        }
        return loginEntity;
    }

    public void setLoginEntity(LoginEntity loginEntity) {
        this.loginEntity = loginEntity;
        setBackupUserInfoEntity(loginEntity);
    }

    private static void setBackupUserInfoEntity(LoginEntity loginEntity) {
        String backpu_currentUser = new Gson().toJson(loginEntity);
        shareUtil.setShareStringPara(SharedConsts.CURRENT_USERINFO_FILE, SharedConsts.CURRENT_USERINFO, backpu_currentUser);
    }

    public LoginEntity recoveryUserInfoEntity() {
        String backpu_currentUser = shareUtil.getShareStringPara(SharedConsts.CURRENT_USERINFO_FILE, SharedConsts.CURRENT_USERINFO, "");
        return StringUtil.isNull(backpu_currentUser) ? null : new Gson().fromJson(backpu_currentUser, LoginEntity.class);
    }

    public void cleanUserInfoEntity() {
        shareUtil.removeSharePara(SharedConsts.CURRENT_USERINFO_FILE, SharedConsts.CURRENT_USERINFO);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
        shareUtil = new SharedUtil(this);
        initImageLoaderConfig();
        initUmeng();
        initBaiduLocation();
        //initSqb();
    }

//	//初期化收钱吧控件
//	private void initSqb() {
//		upayTask = UpayTask.getInstance();
//		DebugConfig.setDebug(true);
//		upayTask.initUpay(getApplicationContext(), true, com.wosai.upay.http.Env.UrlType.PRO); 	//DEV:开发环境,PRO:生产环境
//	}

    private void initBaiduLocation() {
        locationClient = new LocationClient(getApplicationContext());     //声明LocationClient类
        initLocation();
    }

    private void initUmeng() {
        MobclickAgent.setDebugMode(false);    //关闭友盟Log
        MobclickAgent.openActivityDurationTrack(false);
        UMAnalyticsConfig config = new UMAnalyticsConfig(this, "57835c6a67e58e400f001795", "");
        MobclickAgent.startWithConfigure(config);
        MobclickAgent.setDebugMode(false);
    }

    private void initImageLoaderConfig() {

        File cacheDir = StorageUtils.getOwnCacheDirectory(this, "imageloader/Cache");

        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_img_moren)                            // 设置图片加载时的默认图片
                .showImageForEmptyUri(R.mipmap.ic_img_moren)                            // 设置图片URI为空时默认图片
                .showImageOnFail(R.mipmap.ic_img_moren)                                // 设置图片加载失败的默认图片
                .resetViewBeforeLoading(false)                                    // 设置是否将View在加载前复位
                //.delayBeforeLoading(100)										// 设置延迟部分时间才开始加载   默认为0
                .cacheInMemory(true)                                            // 设置添加到内存缓存   默认为false
                .cacheOnDisc(true)                                                // 设置添加到硬盘缓存   默认为false
                //.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)			// 设置规模类型的解码图像   默认为ImageScaleType.IN_SAMPLE_POWER_OF_2
                //.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
                //.bitmapConfig(Bitmap.Config.ARGB_8888)							// 设置位图图像解码配置   默认为Bitmap.Config.ARGB_8888
                .bitmapConfig(Bitmap.Config.RGB_565)                            // 设置图片加载或解码过程中发生错误显示的图片
                .decodingOptions(new Options())                                    // 设置选项的图像解码
                //.displayer(new FadeInBitmapDisplayer(300))						// 设置自定义显示器   默认为DefaultConfigurationFactory.createBitmapDisplayer()  设置图片渐显的时间
                //。displayer(new RoundedBitmapDisplayer(5))       				//图片圆角显示，值为整数
                .build(); // 创建配置过得DisplayImageOption对象

        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
                //.memoryCacheExtraOptions(720, 1280)								// 内存缓存的设置选项 (最大图片宽度,最大图片高度) 默认当前屏幕分辨率
                //.discCacheFileNameGenerator(new Md5FileNameGenerator())			// 设置硬盘缓存文件名生成规范   // 默认为new HashCodeFileNameGenerator()
                .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)    // 硬盘缓存的设置选项 (最大图片宽度,最大图片高度,压缩格式,压缩质量，处理器)
                .denyCacheImageMultipleSizesInMemory()                            // 设置拒绝缓存在内存中一个图片多个大小 默认为允许,(同一个图片URL)根据不同大小的imageview保存不同大小图片
                .discCache(new UnlimitedDiscCache(cacheDir))                    // 自定义缓存路径
                //.discCache(new UnlimitedDiscCache(StorageUtils.getCacheDirectory(getApplicationContext())))	//设置硬盘缓存   默认为StorageUtils.getCacheDirectory(getApplicationContext())  即/mnt/sdcard/android/data/包名/cache/
                .discCacheSize(10 * 1024 * 1024)                                // 设置硬盘缓存的最大大小
                .discCacheFileCount(100)                                        // 设置硬盘缓存的文件的最多个数
                .threadPoolSize(6)                                                // 设置显示图片线程池大小，默认为3
                .threadPriority(Thread.NORM_PRIORITY - 2)                        // 设置图片加载线程的优先级,默认为Thread.NORM_PRIORITY-1
                .tasksProcessingOrder(QueueProcessingType.FIFO)                    // 设置图片加载和显示队列处理的类型 默认为QueueProcessingType.FIFO
                //.taskExecutor(DefaultConfigurationFactory.createExecutor(6, Thread.NORM_PRIORITY - 2, QueueProcessingType.FIFO))
                .memoryCache(new LruMemoryCache(4 * 1024 * 1024))                // 设置内存缓存 默认为一个当前应用可用内存的1/8大小的LruMemoryCache
                .memoryCacheSize(4 * 1024 * 1024)                                // 设置内存缓存的最大大小 默认为一个当前应用可用内存的1/8
                .memoryCacheSizePercentage(13)                                    // 设置内存缓存最大大小占当前应用可用内存的百分比 默认为一个当前应用可用内存的1/8
                .imageDownloader(new BaseImageDownloader(this, 10 * 1000, 10 * 1000))    // 超时时间 10秒
                //.imageDownloader(new HttpClientImageDownloader(getApplicationContext(), new DefaultHttpClient()))	//设置图片下载器   默认为 DefaultConfigurationFactory.createBitmapDisplayer()
                .imageDecoder(new BaseImageDecoder(true))
                //.imageDecoder(DefaultConfigurationFactory.createImageDecoder(false))	//设置图片解码器   默认为DefaultConfigurationFactory.createImageDecoder(false)
                .defaultDisplayImageOptions(options)
                //.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) 		// 设置默认的图片显示选项   默认为DisplayImageOptions.createSimple()
                .writeDebugLogs()                                                        // 打印DebugLogs
                .build();// 开始构建

        ImageLoader.getInstance().init(config);

        com.nostra13.universalimageloader.utils.L.disableLogging();
        //com.nostra13.universalimageloader.utils.L.enableLogging();

    }

    private void initLocation() {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationMode.Hight_Accuracy);//可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType("bd09ll");//可选，默认gcj02，设置返回的定位结果坐标系
        int span = 1000;
        option.setScanSpan(span);//可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);//可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);//可选，默认false,设置是否使用gps
        option.setLocationNotify(true);//可选，默认false，设置是否当gps有效时按照1S1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死  
        option.SetIgnoreCacheException(false);//可选，默认false，设置是否收集CRASH信息，默认收集
        option.setEnableSimulateGps(false);//可选，默认false，设置是否需要过滤gps仿真结果，默认需要
        locationClient.setLocOption(option);
    }


    public static MyApplication getmInstance() {
        return mInstance;
    }

    public static AsyncHttpClient getHttpclient() {
        return httpclient;
    }
//	public static Activity getActivity() {return activity;}
//	public static void setActivity(Activity activity) {MyApplication.activity = activity;}

    public int dp2px(int dp) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());
    }

    /**
     * 沉浸式通知栏
     */
    @SuppressLint("InlinedApi")
    public void showImmersiveNotification(Activity context) {
        //if(mContext==null)return;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            LinearLayout notification_padding_layout = (LinearLayout) context.findViewById(R.id.notification_padding_layout);
            if (notification_padding_layout == null) return;
            notification_padding_layout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ScreenUtils.getStatusHeight(context)));
            ((Activity) context).getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//            context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }

//		if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){//4.4 全透明状态栏
//			context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//		}
//
//		if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0 全透明实现
//			Window window = context.getWindow();
//			window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//			window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//					| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
//			window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//			window.setStatusBarColor(Color.TRANSPARENT);//calculateStatusColor(Color.WHITE, (int) alphaValue)
//		}
    }

}
